package servlets;

import basicas.Opcao;
import fachadas.FachadaDePerguntas;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import pergunta.Pergunta;

/**
 *
 * @author Diego
 */
public class ProcessadorDePergunta extends HttpServlet {
   
    private int inicio = 0;
    private int fim = 10;
    private int minutosIniciais;
    private int minutosFinais;
    static private boolean respondeu = false;
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String n = request.getParameter("numero");
        String opcao = request.getParameter("op");
        int numeroDaQuestao = Integer.parseInt(n);
        HttpSession sessao = request.getSession(false);
        
        if(sessao == null){
            request.getRequestDispatcher("Game Over.jsp").forward(request, response);
        }
        List<Pergunta> listaDePergunta = (List) sessao.getAttribute("lista");
        List<String> respostas = (List) sessao.getAttribute("respostas");
        boolean saida = false; 
        int tempo = 0;
        
        
        if(!respondeu && sessao != null){
        //adicionando a resposta
         respostas.add(opcao);
         //sessao.removeAttribute("respostas");
         //sessao.setAttribute("respostas", respostas);
         
         
        //trocando a pergunta
            if(numeroDaQuestao < fim){
                    request.setAttribute("tempoInicial", minutosIniciais);
                    request.setAttribute("limite", minutosFinais);
                try{
                    Pergunta p = listaDePergunta.get(numeroDaQuestao);
                    request.removeAttribute("p");
                    request.setAttribute("p", p);
                    ++numeroDaQuestao;
                    request.setAttribute("numero", numeroDaQuestao);
                }catch(IndexOutOfBoundsException i){  
                    saida = true;
                    setarFlagVerdadeiro();
                }
            }else{
                saida = true;
                setarFlagVerdadeiro();
            }
        
            sessao.removeAttribute("lista");
            sessao.setAttribute("lista", listaDePergunta);
           //respondeu o questionario todo e vai pra resposta
            if(saida){     
            request.getRequestDispatcher("ProcessdorDeResposta").forward(request, response);
           }else{//ta respondendo e vai de volta pras perguntas.
               request.getRequestDispatcher("User/perguntas.jsp").forward(request, response);
           }
        }else {
            request.getRequestDispatcher("ProcessdorDeResposta").forward(request, response);
        }
    } 

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        List<Pergunta> listaDePerguntas = new ArrayList<Pergunta>();
        List<String> respostas = new ArrayList();
        FachadaDePerguntas f = FachadaDePerguntas.getInstance();
        HttpSession sessao = request.getSession();
        int tema,dificuldade;
        String caminhoDaImagem;
        Opcao op = (Opcao) sessao.getAttribute("opcao");
        setarFlagFalso();
        tema = op.getOpcaoDeTema();
        dificuldade = op.getDificuldade();
        caminhoDaImagem = op.getCaminhoDaImagem();
        
        Calendar calendario =  Calendar.getInstance(); 
        Date agora = calendario.getTime();
        
        
         minutosIniciais = agora.getMinutes();
         minutosFinais = (agora.getMinutes() + 10);
         
         if(minutosIniciais >= 51){
             minutosFinais = minutosIniciais%10;
         }
        sessao.setAttribute("caminhoDaImagem", caminhoDaImagem);
        
        listaDePerguntas = f.pegarPerguntas(tema,dificuldade);
        Collections.shuffle(listaDePerguntas);
        
        if(!listaDePerguntas.isEmpty()){
            request.setAttribute("tempoInicial", minutosIniciais);
            request.setAttribute("limite", minutosFinais);
            sessao.setAttribute("lista", listaDePerguntas);
            Pergunta p = listaDePerguntas.get(inicio);
            request.setAttribute("p", p);
             sessao.setAttribute("numero", (inicio+1));
            sessao.setAttribute("respostas",respostas);
              //sessao.setMaxInactiveInterval(60);
            request.getRequestDispatcher("User/perguntas.jsp").forward(request, response);
        }else{
            String erro = "Nao há perguntas sobre esse assunto!";
             request.setAttribute("erro", erro);   
             request.getRequestDispatcher("erro.jsp").forward(request, response);
        }
    }
    
    
    private void setarFlagFalso(){
        this.respondeu = false;
    }
    
    private void setarFlagVerdadeiro(){
        this.respondeu = true;
    }
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}
